package cn.zxh.improvement.common.core.pipeline;


import cn.zxh.improvement.common.core.pipeline.context.EventContext;

/**
 * 事件处理模板
 *
 * @author zxh
 * @since 2023-6-7 16:12:23
 */
public abstract class AbstractEventFilter<T extends EventContext> implements EventFilter<T> {

    @Override
    public void doFilter(T context, EventFilterChain<T> chain) {
        if (context.getFilterSelector().matchFilter(this.getClass().getSimpleName())) {
            handle(context);
        }
        if (context.continueChain()) {
            chain.fireNext(context);
        }
    }

    /**
     * 处理上下文
     *
     * @param context 上下文
     */
    protected abstract void handle(T context);
}
